package boundary;

import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import entities.Utilisateur;
import entities.Utilisateur_;

@Stateless
public class UtilisateurEJB {

    @PersistenceContext(unitName = "TM-PU")
    EntityManager em;

    public List<Utilisateur> listerAllUtilisateurs() {
        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<Utilisateur> q = cb.createQuery(Utilisateur.class);
        Root<Utilisateur> utilisateur = q.from(Utilisateur.class);
        q.select(utilisateur);

        return em.createQuery(q).getResultList();
    }

    public List<Utilisateur> listerUtilisateurs(String role) {
        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<Utilisateur> q = cb.createQuery(Utilisateur.class);
        Root<Utilisateur> utilisateur = q.from(Utilisateur.class);
        q.select(utilisateur);
        q.where(cb.equal(utilisateur.get(Utilisateur_.role), role));

        return em.createQuery(q).getResultList();
    }

    public Utilisateur findUtilisateur(long id) {
        return em.find(Utilisateur.class, id);
    }

    public Utilisateur findUtilisateur(String mail, String pw) {
        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<Utilisateur> q = cb.createQuery(Utilisateur.class);
        Root<Utilisateur> utilisateur = q.from(Utilisateur.class);
        q.select(utilisateur);
        q.where(cb.equal(utilisateur.get(Utilisateur_.mail), mail), cb.equal(utilisateur.get(Utilisateur_.pw), pw));

        return em.createQuery(q).getSingleResult();
    }

    public void creerUtilisateur(Utilisateur utilisateur) {
        em.persist(utilisateur);
    }

    public void supprimerUtilisateur(Utilisateur utilisateur) {
        em.remove(utilisateur);
    }
}
